package com.design.patterns.behavioralModel.factoryMethod;

import com.design.patterns.behavioralModel.factoryMethod.factory.NumberFactory;
import com.design.patterns.behavioralModel.factoryMethod.staticFactory.NumberUtils;

/**
 * 工厂方法模式
 * 工厂方法为一种对象性的设计模式
 * 定义：一个用于创建对象的接口，让子类决定实例化哪一个类。FactoryMethod是一个类的 实例化延迟到子类
 * 目的：工厂方法的目的是使得创建对象和使用对象是分离的，并且客户端总是引用抽象工厂和抽象产品
 */
public class FactoryMethodMain {
    public static void main(String[] args) {
        /**
         * 在客户端中，我们只需要和工厂接口NumberFactory以及抽象产品int打交道;
         * 在spring中我们把这个步骤交还给ioc容器去做
         * 这就是一个工厂方法的实例
         */
        NumberFactory numberFactory = NumberFactory.getInstance();
        int parse = numberFactory.parse("12");
        System.out.println(parse);
        /**
         * 当我们使用不那么复杂的方法时，我们会使用静态工厂方法
         * 常用于工具类等静态工具，我们只需要关注使用工具的业务，而不需要关注实现
         * 以下是静态工厂方法的实例
         */
        int parse1 = NumberUtils.parse("12");
        System.out.println(parse1);
    }

}
